import random
import string
import os


def generate_content(content_type, length=100):
    """
    根据类型生成指定内容

    Args:
        content_type (str): 内容类型 ('digits', 'letters', 'symbols', 'mixed')
        length (int): 生成内容的长度

    Returns:
        str: 生成的内容
    """
    if content_type == 'digits':
        # 生成纯数字
        return ''.join(random.choices(string.digits, k=length))
    elif content_type == 'letters':
        # 生成纯字母
        return ''.join(random.choices(string.ascii_letters, k=length))
    elif content_type == 'symbols':
        # 生成纯符号
        symbols = "!@#$%^&*()_+-=[]{}|;:,.<>?"
        return ''.join(random.choices(symbols, k=length))
    elif content_type == 'mixed':
        # 生成混合内容
        all_chars = string.ascii_letters + string.digits + "!@#$%^&*()_+-=[]{}|;:,.<>?"
        return ''.join(random.choices(all_chars, k=length))
    else:
        raise ValueError("不支持的内容类型")


def create_file(filename, content_type, length=100):
    """
    创建指定类型的文件

    Args:
        filename (str): 文件名
        content_type (str): 内容类型
        length (int): 内容长度
    """
    # 确保data目录存在
    data_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data')
    os.makedirs(data_dir, exist_ok=True)

    # 完整的文件路径
    file_path = os.path.join(data_dir, filename)

    content = generate_content(content_type, length)

    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(content)

    print(f"已创建文件: {file_path}")
    print(f"文件类型: {content_type}")
    print(f"内容长度: {length}")


def get_type_suffix(content_type):
    """
    根据内容类型获取文件名后缀

    Args:
        content_type (str): 内容类型

    Returns:
        str: 对应的文件名后缀
    """
    suffix_mapping = {
        'digits': 'num',
        'letters': 'letter',
        'symbols': 'symbol',
        'mixed': 'mixed'
    }
    return suffix_mapping.get(content_type, 'unknown')


def main():
    """
    主函数 - 询问用户并生成相应文件（循环模式）
    """
    print("文件生成工具 - 循环模式")
    print("提示：在任何输入步骤直接按回车可退出程序")

    while True:
        print("\n" + "=" * 40)
        print("请选择要生成的文件类型:")
        print("1. 纯数字文件")
        print("2. 纯字母文件")
        print("3. 纯符号文件")
        print("4. 混合类型文件")

        choice = input("请输入选项 (1-4): ").strip()

        # 如果用户直接回车，则退出程序
        if not choice:
            print("程序已退出")
            break

        # 映射用户选择到内容类型
        type_mapping = {
            '1': 'digits',
            '2': 'letters',
            '3': 'symbols',
            '4': 'mixed'
        }

        if choice not in type_mapping:
            print("无效选择，请输入 1-4 之间的数字")
            continue

        content_type = type_mapping[choice]

        # 获取内容长度
        length_input = input("请输入内容长度: ").strip()

        # 如果用户直接回车，则退出程序
        if not length_input:
            print("程序已退出")
            break

        try:
            length = int(length_input)
        except ValueError:
            print("长度输入无效，请输入一个数字")
            continue

        # 生成新的文件名格式: 大小_类型
        type_suffix = get_type_suffix(content_type)
        filename = f"{length}B_{type_suffix}.txt"

        # 创建文件
        try:
            create_file(filename, content_type, length)
            print(f"{filename}文件生成成功!")
        except Exception as e:
            print(f"文件生成失败: {e}")


if __name__ == "__main__":
    main()
